package com.xuan.controller;

import com.xuan.common.util.PageResult;
import com.xuan.common.util.R;
import com.xuan.entity.Student;
import com.xuan.service.IStudentService;
import com.xuan.valueobject.ValueObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author xuan
 * @since 2025-01-07
 */
@RestController
@RequestMapping("/student")
public class StudentController {
    @Autowired
    private IStudentService studentService;

    //这里是学生列表
    @RequestMapping("/FindList")
    public R getStudent() {
        return R.ok().data("list",studentService.list());
    }

    // 这一部分是分页查询
    //传参和vue里面一直可以少写一点配置
    @GetMapping("/findByPage/{page}/{pageSize}")
    //PathVariable这个注解从URL中获取值，从请求的URL中提取特定的部分作为变量，
    // 提取的值可以直接绑定到控制器方法中的参数上，无需手动解析URL，可以简化代码编写。
    public R findByPage(@PathVariable("page") Integer page,
                        @PathVariable("pageSize") Integer pageSize) {
        PageResult<Student> h = studentService.findByPage(page,pageSize);
        return R.ok().data("h",h);
    }


    //带条件的分页查询
    @PostMapping("/find/{page}/{pageSize}")
    public R search(@PathVariable("page") Integer page,
                    @PathVariable("pageSize") Integer pageSize,
                    @RequestBody(required = false) ValueObject vo){
        PageResult<Student> h = studentService.find(page,pageSize,vo);
        return R.ok().data("h",h);
    }
    // 添加学生
    @PostMapping("/add")
    public R createStudent(@RequestBody Student student) {
        boolean operationSuccess = studentService.add(student);
        return operationSuccess ? R.ok().message("添加学生成功！") : R.error().message("添加学生失败！");
    }

    // 修改学生
    @PutMapping("/update")
    public R modifyStudent(@RequestBody Student student) {
        boolean updateSuccess = studentService.updateById(student);
        return updateSuccess ? R.ok().message("修改学生成功！") : R.error().message("修改学生失败！");
    }

    // 删除学生
    @DeleteMapping("/delete/{ids}")
    public R removeStudent(@PathVariable("ids") String ids) {
        List<String> idList = Arrays.stream(ids.split(",")).collect(Collectors.toList());
        boolean deletionSuccess = studentService.removeByIds(idList);
        return deletionSuccess ? R.ok().message("删除学生成功！") : R.error().message("删除学生失败！");
    }


}
